﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using ProgNetComponentsDx.Options;

namespace BuildHelper.Narzedzia.ZmienneSrodowiskowe
{
    public partial class FormZmienneSrodowiskowe : MyBaseSqlCeGridForm
    {
        public FormZmienneSrodowiskowe()
        {
            InitializeComponent();
            gvMachine.ActiveFilterString = "TYP = 'Maszyny'";
            gvProcess.ActiveFilterString = "TYP = 'Procesu'";
            gvUser.ActiveFilterString = "TYP = 'Użytkownika'";
            this.Controls.Remove(gcMain);
            tabPrywatne.Controls.Add(gcMain);
            gcMain.Dock = DockStyle.Fill;
        }

        private void GetEnvVars()
        {
            dataSetZmienne1.ZMIENNE.Clear();
            dataSetZmienne1.ZMIENNE.AcceptChanges();
            try
            {
                IDictionary dic = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process);
                foreach (object key in dic.Keys)
                {
                    dataSetZmienne1.ZMIENNE.AddZMIENNERow(key.AsString(), dic[key].AsString(), "Procesu");
                }
                if (OptionCache.GetOptionBoolValue(Init.InitFormOptionNames.Narzedzia_Group.ZmienneSrodowiskowe.PokazZmienneMaszyny))
                {
                    dic = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
                    foreach (object key in dic.Keys)
                    {
                        dataSetZmienne1.ZMIENNE.AddZMIENNERow(key.AsString(), dic[key].AsString(), "Maszyny");
                    }
                }
                if (OptionCache.GetOptionBoolValue(Init.InitFormOptionNames.Narzedzia_Group.ZmienneSrodowiskowe.PokazZmienneUzytkownika))
                {
                    dic = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User);
                    foreach (object key in dic.Keys)
                    {
                        dataSetZmienne1.ZMIENNE.AddZMIENNERow(key.AsString(), dic[key].AsString(), "Użytkownika");
                    }
                }
            }
            catch (Exception ex)
            {
                ex.LogError();
            }
        }
        protected override bool GetRecords()
        {
            dataSetZmienne1.Clear();
            bool res = base.GetRecords();
            GetEnvVars();
            dataSetZmienne1.AcceptChanges();
            return res;
        }
        protected override bool Save()
        {
            List<string> delete = new List<string>();
            DataRow[] rows = dataSetZmienne1.STP_ZMIENNE.Select(null, null, DataViewRowState.Deleted);
            foreach (DataRow r in rows)
                delete.Add(r["STP_ZM_NAZWA", DataRowVersion.Original].AsString());
            bool res = base.Save();
            if (res)
            {
                Setup.Brancze.BranczeTools.SetEnvVariables(true, delete);
                GetEnvVars();
            }
            return res;
        }
    }
}
